gl renderer: Reset clip when drawing offscreen
authorTimm Bäder <mail@baedert.org>
Sat, 27 Jan 2018 11:13:37 +0000 (12:13 +0100)
committerTimm Bäder <mail@baedert.org>
Sat, 27 Jan 2018 11:13:37 +0000 (12:13 +0100)
Just like we reset the scissor test and the viewport, we also can't use
the current clip anymore in this case.

gsk/gl/gskglrenderer.c

index 00dc36416d017e1ffbf8084242229b9f3f6f69fb..c78f238c8f51e40c028755344130a882ad75c3ee 100644 (file)
@@ -2232,6 +2232,7 @@ add_offscreen_ops (GskGLRenderer   *self,
   graphene_matrix_t prev_modelview;
   graphene_rect_t prev_viewport;
   graphene_matrix_t item_proj;
+  GskRoundedRect prev_clip;
 
   /* We need the child node as a texture. If it already is one, we don't need to draw
    * it on a framebuffer of course. */
@@ -2268,10 +2269,14 @@ add_offscreen_ops (GskGLRenderer   *self,
   ops_add (builder, &op);
   prev_projection = ops_set_projection (builder, &item_proj);
   prev_modelview = ops_set_modelview (builder, &identity);
-  prev_viewport = ops_set_viewport (builder, &GRAPHENE_RECT_INIT (min_x, min_y, width, height));
+  prev_viewport = ops_set_viewport (builder, &GRAPHENE_RECT_INIT (min_x, min_y,
+                                                                  width, height));
+  prev_clip = ops_set_clip (builder,
+                            &GSK_ROUNDED_RECT_INIT (min_x, min_y, width, height));
 
   gsk_gl_renderer_add_render_ops (self, child_node, builder);
 
+  ops_set_clip (builder, &prev_clip);
   ops_set_viewport (builder, &prev_viewport);
   ops_set_modelview (builder, &prev_modelview);
   ops_set_projection (builder, &prev_projection);